﻿
using mvLibrary;
using mvLibrary.Helpers.Utils;
using BlueFinity.mvNET.CoreObjects;
using System;
using mvLibrary.Helpers.BaseClass;

namespace fenk.Stock.Reservas
{
    public partial class AltaReservas : BaseForm
    {
        private const string PRODUCTO_FILENAME = "PRODUCTOS";
        private const int PRODUCTOS_INDEX = 6;
        private const int CANTIDAD_INDEX = 7;
        private const int STOCK_RESERVADO_INDEX = 40;
        private const int CANCELADO_INDEX = 9;
        private bool previousCancelState;

        public AltaReservas()
        {
            InitializeComponent();
        }

        public override void AfterReadItem()
        {
            gpbBajaReserva.Visible = ItemStatus.Equals(Status.Update);
            previousCancelState = FenkUtils.GetBoolFromYesNoString(Item.get_Text(CANCELADO_INDEX));
            this.panelData.Enabled = !previousCancelState;
        }

        public override void AfterSaveItem()
        {
            bool isCancelOperation = !previousCancelState.Equals(chkCancelarReserva.Checked);
            var idProductos = Item.GetSplittedElementsFromAttribute(PRODUCTOS_INDEX);

            PickAccount.Login();
            int position = 0;
            foreach (var idProducto in idProductos)
            {
                int cantidadProductoAnterior =
                          OldItem.GetIntValueFromAttributeInPosition(CANTIDAD_INDEX, position);

                int cantidadProductoActual = !isCancelOperation ?
                    Item.GetIntValueFromAttributeInPosition(CANTIDAD_INDEX, position) : FenkUtils.ZERO;
                    

                BasicMvItem producto = programCaller.GetItemById(PickAccount, idProducto, PRODUCTO_FILENAME);
                int stockReservado = Convert.ToInt32(producto.GetAttribute(STOCK_RESERVADO_INDEX));

                producto.SetAttribute(STOCK_RESERVADO_INDEX, stockReservado - cantidadProductoAnterior + cantidadProductoActual);
                string productoString = producto.ToString;

                programCaller.SaveItem(PickAccount, productoString, idProducto, PRODUCTO_FILENAME, User);
                position++;
            }

            PickAccount.Logout();

        }
    }
}
